CREATE OR REPLACE FUNCTION SP_DISTRIBUIR_ORDENES_MAQUINAS()
RETURNS void AS
$BODY$
DECLARE
   FILA ORDEN_TRABAJO%rowtype;
   FILAMAQUINA MAQUINA%rowtype;  
   TIPOCARRERA INTEGER;
   CANT INTEGER;
BEGIN
	--RECORRE LAS ORDENES DE TRABAJO PENDIENTES
	FOR FILA IN (SELECT * FROM ORDEN_TRABAJO WHERE ESTADO='P')
	LOOP

	--DISTRIBUYE SEGUN EL TIPO DE CARRERA
	SELECT CARRERA INTO TIPOCARRERA FROM ORDEN_TRABAJO WHERE ID = FILA.ID;
	
	   FOR FILAMAQUINA IN (SELECT * FROM MAQUINA)	    
	     LOOP
		IF FILAMAQUINA.IDTIPOCARRERA = TIPOCARRERA THEN
		SELECT COUNT(*) INTO CANT FROM DISTRIBUCION_ORDENES_MAQUINAS WHERE ID_ORDEN = FILA.ID;
		   IF CANT = 0 THEN
		      insert into DISTRIBUCION_ORDENES_MAQUINAS values(nextval('SQ_DISTRIBUCION_ORDENES_MAQUINAS'),FILA.ID,FILAMAQUINA.ID);
		   END IF;
                END IF;
	   END LOOP;
	END LOOP;
END;
$BODY$
LANGUAGE plpgsql VOLATILE COST 100;
ALTER FUNCTION SP_DISTRIBUIR_ORDENES_MAQUINAS() OWNER TO postgres;
commit;

/*=============================================================================*/

CREATE OR REPLACE FUNCTION SP_PRIORIZAR_ORDENES()
RETURNS void AS
$BODY$
DECLARE
   FILA ORDEN_TRABAJO%rowtype;  
   TIPOCLIENTE CHARACTER VARYING;  
BEGIN
	--RECORRE LAS ORDENES DE TRABAJO PENDIENTES
	FOR FILA IN (SELECT * FROM ORDEN_TRABAJO WHERE ESTADO='P')
	LOOP

		--PRIORIZA SEGUN EL TIPO DE CLIENTE
		SELECT TIPO INTO TIPOCLIENTE FROM CLIENTE WHERE ID = FILA.ID_CLIENTE;

		CASE 
		   WHEN TIPOCLIENTE='VIP' THEN
			UPDATE ORDEN_TRABAJO SET PRIORIDAD = 'ALTA' WHERE ID = FILA.ID;
		   WHEN TIPOCLIENTE='MEDIO' THEN
			UPDATE ORDEN_TRABAJO SET PRIORIDAD = 'MEDIA' WHERE ID = FILA.ID;
		   WHEN TIPOCLIENTE='BAJO' THEN
			UPDATE ORDEN_TRABAJO SET PRIORIDAD = 'BAJA' WHERE ID = FILA.ID;
		END CASE;	
		  
	END LOOP;
END;
$BODY$
LANGUAGE plpgsql VOLATILE COST 100;
ALTER FUNCTION SP_PRIORIZAR_ORDENES() OWNER TO postgres;
commit;